Cyber attacks may rely upon techniques that can repurpose existing code in a software program (or “application”) and cause that code to carry out malicious tasks. In order to accomplish this goal, an attacker may determine the location in memory of existing code that they wish to exploit, and then corrupt the program state in a way such that their desired actions are carried out instead of the program's intended actions. Operating system and application developers have responded in turn to such threats by introducing memory protection techniques. For example, Address Space Layout Randomization (ASLR) is intended to obscure the location of code in memory by randomizing the location of the stack, heap, linked libraries, and program code. ASLR may be performed once during the program lifetime, for example at program startup. Existing memory protection techniques have been successfully attacked and such attacks are widely used.